package com.zpark.se.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

/**
 * 线程数根据任务动态调整的线程池
 */
public class ThreadPool02 {
    public static void main(String[] args) {
        // 创建线程池，线程数量跟随任务变化
        /*
         newCachedThreadPool(): 创建一个线程池，如果当前线程池中的线程数量大于当前需
         要执行的任务数量，则复用线程，否则创建新的线程。
         */
        ExecutorService pool = Executors.newCachedThreadPool();

        // 仅单线程执行的线程池
        ExecutorService pool2 = Executors.newSingleThreadExecutor();

        /*
         newScheduledThreadPool(int corePoolSize): 创建一个定长线程池，支持定时及周期性
         */
        ScheduledExecutorService pool1 = Executors.newScheduledThreadPool(5);


        /*
         newWorkStealingPool(): 创建一个使用 ForkJoinPool 的线程池，该线程池的线程数跟随
         使用所有可用处理器作为其目标并行级别创建偷取工作的线程池。
         */
        ExecutorService executorService = Executors.newWorkStealingPool();
    }
}
